import { ICamlQuery } from '@pnp/sp/lists';

/**
 * 查询连接符
 * @param And And 逻辑与
 * @param Or Or 逻辑或
 */
enum CAMLFilter {
  /** 逻辑与 */
  And = 'And',
  /** 逻辑或 */
  Or = 'Or'
}

//

/**
 * 比较运算符
 * @param Eq Eq 等于
 * @param Neq Neq 不等于
 * @param Gt Gt 大于
 * @param Geq Geq 大于等于
 * @param Lt Lt 小于
 * @param Leq Leq 小于等于
 * @param IsNull IsNull 值为空
 * @param IsNotNull IsNotNull 值不为空
 * @param BeginsWith BeginsWith 以xxx开头
 * @param Contains Contains 包含，模糊查询
 */
enum CAMLCompare {
  /** 等于 */
  Eq = 'Eq',
  /** 不等于 */
  Neq = 'Neq',
  /** 大于 */
  Gt = 'Gt',
  /** 大于等于 */
  Geq = 'Geq',
  /** 小于 */
  Lt = 'Lt',
  /** 小于等于 */
  Leq = 'Leq',
  /** 值为空 */
  IsNull = 'IsNull',
  /** 值不为空 */
  IsNotNull = 'IsNotNull',
  /** 以xxx开头 */
  BeginsWith = 'BeginsWith',
  /** 包含，模糊查询 */
  Contains = 'Contains'
}

/**
 * SharePoint数据类型
 * @param Text Text 单行文本
 * @param Note Note 多行文本
 * @param DateTime DateTime 日期事件
 * @param Number Number 数字类型（包括小数）
 */
enum SPDataType {
  /** 单行文本 */
  Text = 'Text',
  /** 多行文本 */
  Note = 'Note',
  /** 时间日期 */
  DateTime = 'DateTime',
  /** 数字类型（包括小数） */
  Number = 'Number'
}
class CamlQuery implements ICamlQuery {}
class CamlParam {
  FieldName: string; //字段名、列名、表头名、属性名，都是一个意思，比如Title
  FieldValue: string; //要查的值，比如Title=张三的  “张三”
  FieldType: SPDataType; //SharePointDataType  Sharepoint数据类型
  CompareType: CAMLCompare; //比较运算符
  //value 特殊情况下如果不需要传递参数，就给空字符串""
  constructor(name: string, value: string, type: SPDataType, compareType: CAMLCompare) {
    this.FieldName = name;
    this.FieldValue = value;
    this.FieldType = type;
    this.CompareType = compareType;
  }
}
class CamlOrderBy {
  FieldName: string; //排序字段名
  Ascending: string; //是否正序排列  是为True  不是为False
  constructor(name, asc) {
    this.FieldName = name;
    this.Ascending = asc;
  }
}

export { CAMLFilter, CAMLCompare, CamlQuery, CamlParam, SPDataType, CamlOrderBy };
